import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const request = axios.create({
  baseURL: 'http://localhost:8080',
  timeout: 10000,
  withCredentials: true // 支持跨域携带cookie
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 添加调试信息
    console.log('发送请求:', config.method?.toUpperCase(), config.url)
    console.log('请求参数:', config.params || config.data)
    console.log('请求头:', config.headers)
    
    // 可以在这里添加token等认证信息
    return config
  },
  error => {
    console.error('请求拦截器错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    const res = response.data
    console.log('收到响应:', response.config.url, res)
    
    // 检查多种可能的状态码字段
    const statusCode = res.state || res.code || res.status || res.statusCode
    
    // 如果返回的状态码是200或0，说明请求成功
    if (statusCode === 200 || statusCode === 0) {
      return res
    } else {
      console.error('业务错误:', res)
      // 对于401状态码，不要reject，让具体的API调用自己处理
      if (statusCode === 401) {
        return res
      }
      // 其他错误状态码才reject
      return Promise.reject(new Error(res.message || res.msg || '请求失败'))
    }
  },
  error => {
    console.error('请求错误:', error)
    console.error('错误配置:', error.config)
    console.error('错误响应:', error.response?.data)
    
    // 根据错误类型显示不同的错误信息
    if (error.response) {
      // 服务器返回了错误状态码
      const status = error.response.status
      let message = '请求失败'
      
      switch (status) {
        case 400:
          message = '请求参数错误'
          break
        case 401:
          // 401状态码不显示错误消息，让具体的API调用自己处理
          message = '未授权，请重新登录'
          break
        case 403:
          message = '拒绝访问'
          break
        case 404:
          message = '请求的资源不存在'
          break
        case 500:
          message = '服务器内部错误'
          break
        default:
          message = `请求失败 (${status})`
      }
      
      // 对于401状态码，不显示错误消息
      if (status !== 401) {
        ElMessage.error(message)
      }
    } else if (error.request) {
      // 请求已发出但没有收到响应
      ElMessage.error('网络连接失败，请检查网络')
    } else {
      // 其他错误
      ElMessage.error(error.message || '网络错误')
    }
    
    return Promise.reject(error)
  }
)

export default request 